{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<center><strong>中文自然语言处理</strong></center>\n",
    "<center><strong>Transformer模型(一)</strong></center>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "说到自然语言处理, 语言模型, 命名实体识别, 机器翻译, 可能很多人想到的**LSTM等循环神经网络**, 但目前其实LSTM起码在自然语言处理领域已经过时了, 在Stanford阅读理解数据集**(SQuAD2.0)**榜单里, 机器的成绩已经超人类表现, 这很大程度要归功于**transformer的BERT预训练模型**.    \n",
    "今天我们来讲一下**transformer模型**, 你不需要有很多深度学习和数学基础, 我来用简单的语言和可视化的方法从零讲起.   \n",
    "transformer是谷歌大脑在2017年底发表的论文**attention is all you need**中所提出的seq2seq模型. 现在已经取得了大范围的应用和扩展, 而BERT就是从transformer中衍生出来的预训练语言模型.    \n",
    "\n",
    "在我们开始之前, 允许我简单说一下目前自然语言处理领域的现状, 目前**transformer**模型已经得到广泛认可和应用, 而应用的方式主要是先进行**预训练语言模型**, 然后把预训练的模型适配给下游任务, 以完成各种不同的任务, 如分类, 生成, 标记等等, 预训练模型非常重要, 预训练的模型的性能直接影响下游任务的性能, 通过我制作的这几期视频, 我有信心让小伙伴们充分理解transformer并具备一定衍生模型的设计和编写能力."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了让大家充分理解和初步使用transformer和训练BERT, 并应用到自己的需求上, 这个连载课程将包括以下几个视频来完成, 今天讲解第一部分:    \n",
    "__一. transformer编码器(理论部分)__:\n",
    "0. $transformer$模型的直觉, 建立直观认识;\n",
    "1. $positional \\ encoding$, 即**位置嵌入**(或位置编码);\n",
    "2. $self \\ attention \\ mechanism$, 即**自注意力机制**与**注意力矩阵可视化**;\n",
    "3. $Layer \\ Normalization$和残差连接.\n",
    "4. $transformer \\ encoder$整体结构.   \n",
    "\n",
    "__二. transformer代码解读, 语料数据预处理, BERT的预训练和情感分析的应用__:\n",
    "\n",
    "__三. sequence 2 sequence(序列到序列)模型或Name Entity Recognition(命名实体识别)(待定)__:   \n",
    "此部分根据前面的反馈待定."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 0. $transformer$模型的直觉, 建立直观认识;"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先来说一下**transformer**和**LSTM**的最大区别, 就是LSTM的训练是迭代的, 是一个接一个字的来, 当前这个字过完LSTM单元, 才可以进下一个字, 而transformer的训练是并行了, 就是所有字是全部同时训练的, 这样就大大加快了计算效率, transformer使用了位置嵌入$(positional \\ encoding)$来理解语言的顺序, 使用自注意力机制和全连接层来进行计算, 这些后面都会详细讲解.   \n",
    "transformer模型主要分为**两大部分**, 分别是**编码器**和**解码器**, **编码器**负责把自然语言序列映射成为**隐藏层**(下图中**第2步**用九宫格比喻的部分), 含有自然语言序列的数学表达. 然后解码器把隐藏层再映射为自然语言序列, 从而使我们可以解决各种问题, 如情感分类, 命名实体识别, 语义关系抽取, 摘要生成, 机器翻译等等, 下面我们简单说一下下图的每一步都做了什么:   \n",
    "1. 输入自然语言序列到编码器: Why do we work?(为什么要工作);\n",
    "2. 编码器输出的隐藏层, 再输入到解码器;\n",
    "3. 输入$<start>$(起始)符号到解码器;\n",
    "4. 得到第一个字\"为\";\n",
    "5. 将得到的第一个字\"为\"落下来再输入到解码器;\n",
    "6. 得到第二个字\"什\";\n",
    "7. 将得到的第二字再落下来, 直到解码器输出$<end>$(终止符), 即序列生成完成."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![](./imgs/intuition.jpg)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们这节课的内容限于**编码器**部分, 即把**自然语言序列映射为隐藏层的数学表达的过程**, 因为理解了编码器中的结构, 理解解码器就非常简单了,最重要的是**BERT预训练模型**只用到了编码器的部分, 也就是先用编码器训练一个语言模型, 然后再把它适配给其他五花八门的任务.   \n",
    "如果你不知道**语言模型**是什么, 没关系, 这丝毫不影响本节课内容的理解, 下次我们讲**BERT**的时候会讲.   \n",
    "而且我们用编码器就能够完成一些自然语言处理中比较主流的任务, 如情感分类, 语义关系分析, 命名实体识别等, 解码器的内容和序列到序列模型有机会我们会涉及到."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Transformer Block结构图,   注意: 为方便查看, 下面的内容分别对应着上图第1, 2, 3, 4个方框的序号:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![](./imgs/encoder.jpg)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. $positional \\ encoding$, 即**位置嵌入**(或位置编码);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于transformer模型**没有**循环神经网络的迭代操作, 所以我们必须提供每个字的位置信息给transformer, 才能识别出语言中的顺序关系.   \n",
    "现在定义一个位置嵌入的概念, 也就是$positional \\ encoding$, 位置嵌入的维度为$[max \\ sequence \\ length, \\ embedding \\ dimension]$, 嵌入的维度同词向量的维度, $max \\ sequence \\ length$属于超参数, 指的是限定的最大单个句长.   \n",
    "注意, 我们一般以字为单位训练transformer模型, 也就是说我们不用分词了, 首先我们要初始化字向量为$[vocab \\ size, \\ embedding \\ dimension]$, $vocab \\ size$为总共的字库数量, $embedding \\ dimension$为字向量的维度, 也是每个字的数学表达.    \n",
    "在这里论文中使用了$sine$和$cosine$函数的线性变换来提供给模型位置信息:   \n",
    "$$PE_{(pos,2i)} = sin(pos / 10000^{2i/d_{\\text{model}}}) \\quad PE_{(pos,2i+1)} = cos(pos / 10000^{2i/d_{\\text{model}}})\\tag{eq.1}$$\n",
    "上式中$pos$指的是句中字的位置, 取值范围是$[0, \\ max \\ sequence \\ length)$, $i$指的是词向量的维度, 取值范围是$[0, \\ embedding \\ dimension)$, 上面有$sin$和$cos$一组公式, 也就是对应着$embedding \\ dimension$维度的一组奇数和偶数的序号的维度, 例如$0, 1$一组, $2, 3$一组, 分别用上面的$sin$和$cos$函数做处理, 从而产生不同的周期性变化, 而位置嵌入在$embedding \\ dimension$维度上随着维度序号增大, 周期变化会越来越慢, 而产生一种包含位置信息的纹理, 就像论文原文中第六页讲的, 位置嵌入函数的周期从$2 \\pi$到$10000 * 2 \\pi$变化, 而每一个位置在$embedding \\ dimension$维度上都会得到不同周期的$sin$和$cos$函数的取值组合, 从而产生独一的纹理位置信息, 模型从而学到位置之间的依赖关系和自然语言的时序特性.   \n",
    "下面画一下位置嵌入, 可见纵向观察, 随着$embedding \\ dimension$增大, 位置嵌入函数呈现不同的周期变化."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入依赖库\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import math"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_positional_encoding(max_seq_len, embed_dim):\n",
    "    # 初始化一个positional encoding\n",
    "    # embed_dim: 字嵌入的维度\n",
    "    # max_seq_len: 最大的序列长度\n",
    "    positional_encoding = np.array([\n",
    "        [pos / np.power(10000, 2 * i / embed_dim) for i in range(embed_dim)]\n",
    "        if pos != 0 else np.zeros(embed_dim) for pos in range(max_seq_len)])\n",
    "    positional_encoding[1:, 0::2] = np.sin(positional_encoding[1:, 0::2])  # dim 2i 偶数\n",
    "    positional_encoding[1:, 1::2] = np.cos(positional_encoding[1:, 1::2])  # dim 2i+1 奇数\n",
    "    # 归一化, 用位置嵌入的每一行除以它的模长\n",
    "    # denominator = np.sqrt(np.sum(position_enc**2, axis=1, keepdims=True))\n",
    "    # position_enc = position_enc / (denominator + 1e-8)\n",
    "    return positional_encoding"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(69.0, 0.5, 'sequence length')"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x720 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "positional_encoding = get_positional_encoding(max_seq_len=100, embed_dim=16)\n",
    "plt.figure(figsize=(10,10))\n",
    "sns.heatmap(positional_encoding)\n",
    "plt.title(\"Sinusoidal Function\")\n",
    "plt.xlabel(\"hidden dimension\")\n",
    "plt.ylabel(\"sequence length\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Period of Positional Encoding')"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8, 5))\n",
    "plt.plot(positional_encoding[1:, 1], label=\"dimension 1\")\n",
    "plt.plot(positional_encoding[1:, 2], label=\"dimension 2\")\n",
    "plt.plot(positional_encoding[1:, 3], label=\"dimension 3\")\n",
    "plt.legend()\n",
    "plt.xlabel(\"Sequence length\")\n",
    "plt.ylabel(\"Period of Positional Encoding\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "X: [batch_size, len, embedding_size]\n",
    "W: [embedding_size, hidden_dimension]\n",
    "XW = [batch_size, len, hidden_dimension]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. $self \\ attention \\ mechanism$, **自注意力机制**;"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![](./imgs/attention_0.jpg)\n",
    "![](./imgs/attention_1.jpg)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Attention Mask"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![](./imgs/attention_mask.jpg)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "注意, 在上面$self \\ attention$的计算过程中, 我们通常使用$mini \\ batch$来计算, 也就是一次计算多句话, 也就是$X$的维度是$[batch \\ size, \\ sequence \\ length]$, $sequence \\ length$是句长, 而一个$mini \\ batch$是由多个不等长的句子组成的, 我们就需要按照这个$mini \\ batch$中最大的句长对剩余的句子进行补齐长度, 我们一般用$0$来进行填充, 这个过程叫做$padding$.   \n",
    "但这时在进行$softmax$的时候就会产生问题, 回顾$softmax$函数$\\sigma (\\mathbf {z} )_{i}={\\frac {e^{z_{i}}}{\\sum _{j=1}^{K}e^{z_{j}}}}$, $e^0$是1, 是有值的, 这样的话$softmax$中被$padding$的部分就参与了运算, 就等于是让无效的部分参与了运算, 会产生很大隐患, 这时就需要做一个$mask$让这些无效区域不参与运算, 我们一般给无效区域加一个很大的负数的偏置, 也就是:\n",
    "$$z_{illegal} = z_{illegal} + bias_{illegal}$$\n",
    "$$bias_{illegal} \\to -\\infty$$\n",
    "$$e^{z_{illegal}} \\to 0 $$\n",
    "经过上式的$masking$我们使无效区域经过$softmax$计算之后还几乎为$0$, 这样就避免了无效区域参与计算.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. $Layer \\ Normalization$和残差连接."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1). **残差连接**:   \n",
    "我们在上一步得到了经过注意力矩阵加权之后的$V$, 也就是$Attention(Q, \\ K, \\ V)$, 我们对它进行一下转置, 使其和$X_{embedding}$的维度一致, 也就是$[batch \\ size, \\ sequence \\ length, \\ embedding \\ dimension]$, 然后把他们加起来做残差连接, 直接进行元素相加, 因为他们的维度一致:   \n",
    "$$X_{embedding} + Attention(Q, \\ K, \\ V)$$\n",
    "在之后的运算里, 每经过一个模块的运算, 都要把运算之前的值和运算之后的值相加, 从而得到残差连接, 训练的时候可以使梯度直接走捷径反传到最初始层:\n",
    "$$X + SubLayer(X) \\tag{eq. 5}$$\n",
    "2). $LayerNorm$:   \n",
    "$Layer Normalization$的作用是把神经网络中隐藏层归一为标准正态分布, 也就是$i.i.d$独立同分布, 以起到加快训练速度, 加速收敛的作用:\n",
    "$$\\mu_{i}=\\frac{1}{m} \\sum^{m}_{i=1}x_{ij}$$\n",
    "上式中以矩阵的行$(row)$为单位求均值;\n",
    "$$\\sigma^{2}_{j}=\\frac{1}{m} \\sum^{m}_{i=1}\n",
    "(x_{ij}-\\mu_{j})^{2}$$\n",
    "上式中以矩阵的行$(row)$为单位求方差;\n",
    "$$LayerNorm(x)=\\alpha \\odot \\frac{x_{ij}-\\mu_{i}}\n",
    "{\\sqrt{\\sigma^{2}_{i}+\\epsilon}} + \\beta \\tag{eq.6}$$\n",
    "然后用**每一行**的**每一个元素**减去**这行的均值**, 再除以**这行的标准差**, 从而得到归一化后的数值, $\\epsilon$是为了防止除$0$;   \n",
    "之后引入两个可训练参数$\\alpha, \\ \\beta$来弥补归一化的过程中损失掉的信息, 注意$\\odot$表示元素相乘而不是点积, 我们一般初始化$\\alpha$为全$1$, 而$\\beta$为全$0$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. $transformer \\ encoder$整体结构.   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "经过上面3个步骤, 我们已经基本了解到来$transformer$编码器的主要构成部分, 我们下面用公式把一个$transformer \\ block$的计算过程整理一下:    \n",
    "1). 字向量与位置编码:   \n",
    "$$X = EmbeddingLookup(X) + PositionalEncoding \\tag{eq.2}$$\n",
    "$$X \\in \\mathbb{R}^{batch \\ size  \\ * \\  seq. \\ len. \\  * \\  embed. \\ dim.} $$\n",
    "2). 自注意力机制:   \n",
    "$$Q = Linear(X) = XW_{Q}$$ \n",
    "$$K = Linear(X) = XW_{K} \\tag{eq.3}$$\n",
    "$$V = Linear(X) = XW_{V}$$\n",
    "$$X_{attention} = SelfAttention(Q, \\ K, \\ V) \\tag{eq.4}$$\n",
    "3). 残差连接与$Layer \\ Normalization$\n",
    "$$X_{attention} = X + X_{attention} \\tag{eq. 5}$$\n",
    "$$X_{attention} = LayerNorm(X_{attention}) \\tag{eq. 6}$$\n",
    "4). 下面进行$transformer \\ block$结构图中的**第4部分**, 也就是$FeedForward$, 其实就是两层线性映射并用激活函数激活, 比如说$ReLU$:   \n",
    "$$X_{hidden} = Activate(Linear(Linear(X_{attention}))) \\tag{eq. 7}$$\n",
    "5). 重复3).:\n",
    "$$X_{hidden} = X_{attention} + X_{hidden}$$\n",
    "$$X_{hidden} = LayerNorm(X_{hidden})$$\n",
    "$$X_{hidden} \\in \\mathbb{R}^{batch \\ size  \\ * \\  seq. \\ len. \\  * \\  embed. \\ dim.} $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**小结:**   \n",
    "我们到现在位置已经讲完了transformer的编码器的部分, 了解到了transformer是怎样获得自然语言的位置信息的, 注意力机制是怎样的, 其实举个语言情感分类的例子, 我们已经知道, 经过自注意力机制, 一句话中的每个字都含有这句话中其他所有字的信息, 那么我们可不可以添加一个空白字符到句子最前面, 然后让句子中的所有信息向这个空白字符汇总, 然后再映射成想要分的类别呢? 这就是**BERT**, 我们下次会讲到.   \n",
    "在**BERT**的预训练中, 我们给每句话的句头加一个特殊字符, 然后句末再加一个特殊字符, 之后模型预训练完毕之后, 我们就可以用句头的特殊字符的$hidden \\ state$完成一些分类任务了."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
